Recently there has been an increase in the use and availability of compute clouds, sometimes referred to as Platform as a Service (PaaS). Examples of compute clouds are WINDOWS AZURE™, AMAZON EC2 ™, BUNGEE CONNECT™, GOOGLE APP ENGINE™, and others. These compute clouds typically host many tenants, each running their own isolated web applications or web services that are typically accessed by client browsers. The tenant's applications often run in virtual machines (VMs). The compute cloud provides an execution environment that may handle changing conditions and demands in ways that are intended to be transparent to the applications. For example, balancing the load of incoming requests, provisioning network bandwidth, processing resources, storage, scaling applications (e.g., adjusting the number of instances), relocating virtual machines and application instances, etc. Shared computing clouds are managed by an operator entity, allowing tenants to be concerned primarily with their applications.
However, a computing cloud, as an execution environment, may have traits, including both benefits and limitations, that are inconsistent with applications not originally designed to run on the computing cloud. For example, consider a three-tier web application originally designed to run on particular operating systems using specific non-cloud resources (e.g., relational databases) and perhaps various software and hardware facilities. The application may have a web front-end with built-in logic for handling fluctuations in load. The front-end may interface with a middle-tier that implements business logic and interacts with local file storage and back-end storage such as a database. This application may have semantics for self-scaling that are not necessary in a cloud. The application may have its own database layer and accompanying management software that is not needed in the cloud. The application may have operating system configuration settings that conflict with control by the cloud (some clouds may not even require an operating system). Aspects of the application might need to be altered, removed, or added to allow the application to efficiently execute in a computing cloud.
Techniques discussed below relate to tools for migrating applications and virtual machines to computing clouds.